Qt一步步搭建TcpServer2 您所在的位置:网站首页 qt tcp服务端线程中无法发送数据 Qt一步步搭建TcpServer2

Qt一步步搭建TcpServer2

2024-07-09 08:37| 来源: 网络整理| 查看: 265

1封装TcpThread 2修改TcpSession 3添加SessionThreads 4修改TcpServer 5总结

承接上章:Qt一步步搭建TcpServer1——封装QTcpServer,QTcpSocket

本章将在TcpServer的基础上新增线程池,管理Session。

1、封装TcpThread

正所谓工欲善其事,必先利其器。要实现一个线程池,按照Qt的线程用法(如果不懂用法的同学,可以参看我这篇博客:性能特性测试系列4——QT线程与std::thread(下)之QThread)。要想在这里好好用上去,还是得自己重写一个线程类: 头文件:

#ifndef TCPTHREAD_H #define TCPTHREAD_H #include #include class TcpThread : public QThread { public: TcpThread(); ~TcpThread(); virtual void run()override; //会话数 std::atomic_uint32_t SessionCount = 0; }; #endif // TCPTHREAD_H

cpp:

#include "TcpThread.h" TcpThread::TcpThread() { } TcpThread::~TcpThread() { } void TcpThread::run() { exec(); }

又是个看起来很简单的类,别着急,以后还要加东西的。 关于run里的exec()解释下: 这里写图片描述 添加进事件循环,这样就能确保线程不执行完,且加进来的Session能够顺利接收自己的事件。

2、修改TcpSession

既然QThread都出来了,那么TcpSession也要相应的调整调整了: 头文件: 添加TcpThread的指针:

private: TcpThread *Thread_ = nullptr;

构造函数修改下:

TcpSession(TcpThread *thread);

添加个信号函数和槽函数:

void SignalDisConnected(void *); void SlotDisConnected();

cpp:

TcpSession::TcpSession(TcpThread *thread) { this->Thread_ = thread; connect(this, &TcpSession::readyRead, this, &TcpSession::SlotStartRead); connect(this, &TcpSession::disconnected, this, &TcpSession::SlotDisConnected); } TcpSession::~TcpSession() { disconnect(this, &TcpSession::readyRead, this, &TcpSession::SlotStartRead); disconnect(this, &TcpSession::disconnected, this, &TcpSession::SlotDisConnected); } void TcpSession::Disconnect() { qDebug()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有